package jackson.src.day02;

/*
 * Author: JacksonCoder
 * FileName: overObjectMethod
 * Version: 1.0.0
 */
public class overObjectMethod {
    public static void main(String[] args) {
        System.out.println("this is overObjectMethod entry!!!");
        Computer c = new Computer();
        Computer c1 = new Computer();
        ASUS a = new ASUS();
        a.hello();

    }
}
/**
 * 因为所有的class最终都继承自Object，而Object定义了几个重要的方法：
 *
 * toString()：把instance输出为String；
 * equals()：判断两个instance是否逻辑相等；
 * hashCode()：计算一个instance的哈希值。
 */
class Computer{

    protected String name;

    protected Integer cpu;

    // 构造函数
    public Computer() {
        this.name = "华硕"; // 默认值
        this.cpu = 16; // 默认值
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getCpu() {
        return cpu;
    }

    public void setCpu(Integer cpu) {
        this.cpu = cpu;
    }

    @Override
    public String toString(){
        return "Computer:name = " + name;
    }

    @Override
    public boolean equals(Object o) {
        // 当且仅当  o为  Computer类型：
        if(o instanceof  Computer){
            Computer c = (Computer) o;
            // 并且name字段  相同时，  return true
            return this.name.equals(c.name);
        }
        return false;
    }

    // 计算hash
    @Override
    public int hashCode(){
        return this.name.hashCode();
    }

    public String hello(){
        return "hello" + this.name;
    }
}

class ASUS extends  Computer{

    @Override
    public String hello(){
        // 调用父类的 hello（） 方法
        return super.hello() + "!";
    }

}